Lambda 函式,也稱為匿名函式,是一種在單行內定義的小函式。
它不需要像一般函式一樣使用 def 關鍵字來定義函式名稱,而是直接使用 lambda 關鍵字來表示
Lambda 函式的語法非常簡潔,通常用於一些簡單的運算或作為其他函式的參數。
lambda arguments: expression
lambda
:關鍵字,表示定義一個匿名函式。arguments
:函式的參數,可以有多個,用逗號分隔。expression
:函式的運算表達式,也就是函式的返回值。# 傳統函式寫法
def square(x):
return x * x
# Lambda 函式寫法
square = lambda x: x * x
# 兩者效果相同,都可以計算一個數的平方
print(square(5)) # 输出 25
作為其他函式的參數:
- map()
函式:將函式應用於可迭代對象的每個元素。
- filter()
函式:過濾可迭代對象中的元素。
- reduce()
函式:將函式應用於可迭代對象的元素,從左到右累積結果。
- sorted(arguments**,**key=lambda x: expression)
函式:用於排序可迭代對象。
map(function, iterable)
function: 要應用於每個元素的函式。
iterable: 可迭代對象,也就是要進行操作的數據集合。
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x*x, numbers))
print(squared) # 输出 [1, 4, 9, 16]
filter(function, iterable)
function: 這個函式會返回一個布林值,表示元素是否符合條件。
iterable: 要進行篩選的可迭代對象。
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 输出 [2, 4]
sorted(iterable, key=None, reverse=False)
fruits = ['banana', 'apple', 'orange']
sorted_fruits = sorted(fruits, key=lambda x: x[-1])
print(sorted_fruits) # 输出 ['banana', 'orange', 'apple']
最終的排序結果是按照水果名稱的最後一個字母的字母序x[-1]進行排序的。
不曉得你有沒有發現,在map、filter 和 sorted 中 iterable
的位置有點不同?
map 與 filter:map(function, iterable)
iterable(要操作的序列)總是放在 function(要套用的函式)的後面。
這是因為 map 和 filter 的主要目的是對序列中的每個元素應用一個函式,所以序列本身就是操作的物件。r
sorted:sorted(iterable, key=None, reverse=False)
iterable 放在 key(排序的依據)的前面。
這是因為 sorted 的主要目的是對序列iterable進行排序,而 key 是一个可選參數,用于指定排序的依據。
簡單的運算: 對於一些簡單的運算,如平方、求絕對值等,Lambda 函式非常適合。
作為回調函式: 在使用一些庫函式時,需要傳入一個函式作為參數,Lambda 函式可以簡化寫法。
與高階函式結合: map、filter、sorted 等高階函式與 Lambda 函式配合使用,可以寫出非常簡潔的程式碼。
Lambda 函式作為 Python 的一個重要特性,可以讓程式碼更加簡潔和靈活。但過度使用 Lambda 函式也可能降低程式